home *** CD-ROM | disk | FTP | other *** search
/ 1st Multimedia Mac Shareware / Multimedia Shareware CD-ROM - BetaCorp.iso / QuickTimeƒ / QuickTime VCR 3.3 / MP Source / vcr.c < prev   
Encoding:
C/C++ Source or Header  |  1992-07-13  |  14.8 KB  |  711 lines  |  [TEXT/KAHL]

  1. #include <stdio.h>
  2. #include <oops.h>
  3. #include <Movies.h>
  4.  
  5. #include "myQuickTime.h"
  6.  
  7. #include "Dlog.h"
  8. #include "Alert_Class.h"
  9.  
  10. #include "vcr.h"
  11. #include "mycolors.h"
  12.  
  13. extern EventRecord gEvent;
  14. extern Alert_Class *myAlert;
  15. extern QT *myQT;
  16.  
  17. Rect myRects[4]; // This global saves calls to GetDItem over and over
  18.                 // these rects are user Items in the resource file
  19.                 // used to place the buttons where I want them.
  20.  
  21. Boolean blink = false;
  22. long oldTick, newTick;
  23. int currentrect = 0;
  24. Boolean clockSet = false;
  25.  
  26. extern Boolean opened;
  27.  
  28.  
  29. /*....................................................................*/
  30. VCR::VCR()
  31. {
  32.     Buttons myButtons;
  33.     int i;
  34.     int rsrcNum;
  35.     
  36.     myButtons = (*this).myButtons;
  37.     
  38.     
  39.     for(i = 0,rsrcNum = BASE_ICON-1; i < LAST_BUTTON; i++,rsrcNum++) {
  40.         myButtons.button[i] = false;
  41.         myButtons.buttonRNum[i] = rsrcNum;
  42.     }
  43.     (*this).myButtons = myButtons;
  44.     vcr_mode = stopped;
  45. }
  46. /*....................................................................*/
  47. VCR::~VCR()
  48. {
  49.     Buttons myButtons;
  50.     int i;
  51.     int rsrcNum;
  52.     
  53.     myButtons = (*this).myButtons;
  54.     
  55.     
  56.     for(i = 0,rsrcNum = BASE_ICON; i < LAST_BUTTON; i++,rsrcNum++) {
  57.         myButtons.button[i] = false;
  58.         myButtons.buttonRNum[i] = rsrcNum;
  59.     }
  60.     (*this).myButtons = myButtons;
  61. }
  62. /*....................................................................*/
  63. void VCR::loadResource( int number)    // load resource from resource file
  64. {
  65.     DialogPtr myDlog;
  66.     
  67.     /*-------------------------
  68.     Shadow for purging problems
  69.     -------------------------*/
  70.     myDlog = this->myDlog;
  71.     rsrcNumber = number;
  72.     myDlog = GetNewDialog(number,0L,(WindowPtr)-1L);
  73.     
  74.     if ( myDlog == 0L  ) {
  75.         SysBeep(7);
  76.         (*myAlert).AlertStop("\pFatal Error",
  77.                             "\pUnable to allocate new dialog",
  78.                             "\pDlog::loadResource",NULL);
  79.     } /* end if */
  80.     
  81.     CouldDialog(rsrcNumber);    // could be purged so lock it down
  82.  
  83.  
  84.  
  85.     
  86.     GetDItem(myDlog,PROGRESS_1,&itemType,&itemHandle,&itemRect);
  87.     myRects[0] = itemRect;
  88.     
  89.     GetDItem(myDlog,PROGRESS_2,&itemType,&itemHandle,&itemRect);
  90.     myRects[1] = itemRect;
  91.  
  92.     GetDItem(myDlog,PROGRESS_3,&itemType,&itemHandle,&itemRect);
  93.     myRects[2] = itemRect;
  94.  
  95.     GetDItem(myDlog,PROGRESS_4,&itemType,&itemHandle,&itemRect);
  96.     myRects[3] = itemRect;
  97.  
  98.     /*-------------------------
  99.     Copy back from shadow
  100.     -------------------------*/
  101.     this->myDlog = myDlog;
  102.  
  103. }
  104. /*....................................................................*/
  105. int VCR::HandleDialogItem(int itemHit, Point thePoint, int thePart)
  106. {
  107.     DialogPtr myDlog;
  108.     Buttons myButtons;
  109.     
  110.     myDlog = this->myDlog;
  111.     myButtons = (*this).myButtons;
  112.     
  113.     switch ( itemHit  ) {
  114.         case PLAY_BUTTON:
  115.             if (!opened) { SysBeep(7); break;}
  116.             if (myButtons.button[PLAY_BUTTON] == false) {
  117.                 (*this).myButtons = myButtons;
  118.                 ButtonsAndValues(PLAY_BUTTON);
  119.                 (*this).vcr_mode = playing;
  120.                 (*myQT).PlayMovie();
  121.             }
  122.         break;
  123.         
  124.         case STOP_BUTTON:
  125.             if (!opened) { SysBeep(7); break;}
  126.  
  127.             if (myButtons.button[STOP_BUTTON] == false) {
  128.                 (*this).vcr_mode = stopped;
  129.                 (*this).myButtons = myButtons;
  130.                 ButtonsAndValues(STOP_BUTTON);
  131.                 myButtons = (*this).myButtons;
  132.                 myButtons.button[STOP_BUTTON] = false;
  133.                 (*this).myButtons = myButtons;
  134.                 RedrawButtons();
  135.                 DrawAllProgress(sl_darkGray);
  136.                 (*myQT).StopMyMovie();
  137.             }
  138.         break;
  139.         
  140.         case FF_BUTTON:
  141.             if (!opened) { SysBeep(7); break;}
  142.             if (myButtons.button[FF_BUTTON] == false) {
  143.                 (*this).vcr_mode = fastforward;
  144.                 (*this).myButtons = myButtons;
  145.                 ButtonsAndValues(FF_BUTTON);
  146.                 (*myQT).FFMyMovie();
  147.             }
  148.         break;
  149.         
  150.         case GO_START_BUTTON:
  151.             if (!opened) { SysBeep(7); break;}
  152.             if (myButtons.button[GO_START_BUTTON] == false) {
  153.                 (*this).myButtons = myButtons;
  154.                 (*this).vcr_mode = gotostart;
  155.                 ButtonsAndValues(GO_START_BUTTON);
  156.                 myButtons = (*this).myButtons;
  157.                 myButtons.button[GO_START_BUTTON] = false;
  158.                 (*this).myButtons = myButtons;
  159.                 RedrawButtons();
  160.                 (*myQT).GoStartMyMovie();
  161.             }
  162.             break;
  163.             
  164.         case GO_END_BUTTON:
  165.             if (!opened) { SysBeep(7); break;}
  166.             if (myButtons.button[GO_END_BUTTON] == false) {
  167.                 (*this).vcr_mode = gotoend;
  168.                 (*this).myButtons = myButtons;
  169.                 ButtonsAndValues(GO_END_BUTTON);
  170.                 myButtons = (*this).myButtons;
  171.                 myButtons.button[GO_END_BUTTON] = false;
  172.                 (*this).myButtons = myButtons;
  173.                 RedrawButtons();
  174.                 (*myQT).GoEndMyMovie();
  175.             }
  176.             break;
  177.             
  178.         case RW_BUTTON:
  179.             if (!opened) { SysBeep(7); break;}
  180.             if (myButtons.button[RW_BUTTON] == false) {
  181.                 (*this).vcr_mode = re_wind;
  182.                 (*this).myButtons = myButtons;
  183.                 ButtonsAndValues(RW_BUTTON);
  184.                 (*myQT).RWMyMovie();
  185.             }
  186.             break;
  187.         case CLOCK_BOX:
  188.             clockSet = true;
  189.             break;
  190.             
  191.         case VCR_BOX:{
  192.                 Rect bRect;
  193.                 SelectWindow(myDlog);
  194.                 bRect = screenBits.bounds;
  195.                 DragWindow(myDlog,gEvent.where, &bRect);
  196.             }    
  197.             break;
  198.         
  199.         case TAPE_SLOT:
  200.             if (opened) {
  201.                 (*myQT).CloseMovie();
  202.                 opened = false;
  203.             }
  204.             else {
  205.                 opened = (*myQT).OpenMovie();
  206.             }    
  207.         
  208.             break;
  209.             
  210.         case VOLUME_UP:
  211.             if (!opened) {SysBeep(7);break;}
  212.             (*myQT).HandleVolume(UP);
  213.             FlashButton(VOLUME_UP);
  214.             break;
  215.             
  216.         case VOLUME_DOWN:
  217.             if (!opened) {SysBeep(7);break;}
  218.             (*myQT).HandleVolume(DOWN);
  219.             FlashButton(VOLUME_DOWN);
  220.             break;
  221.             
  222.         default: break;
  223.     } /* end switch */
  224.     //(*this).myButtons = myButtons;
  225. }
  226. /*....................................................................*/
  227. void VCR::RedrawDialog()
  228. {
  229.     DialogPtr myDlog;
  230.     GrafPtr oldPort;
  231.     int i;
  232.     
  233.     GetPort(&oldPort);
  234.     myDlog = (*this).myDlog;
  235.     
  236.     SetPort(myDlog);
  237.     DrawDialog(myDlog);
  238.     RedrawButtons();
  239.     RedrawStatus();
  240.     RedrawTime();
  241.     SetPort(oldPort);
  242. }
  243. /*....................................................................*/
  244. void VCR::ButtonsAndValues(int itemHit)
  245. {
  246.     DialogPtr myDlog;
  247.     int i;
  248.     Buttons myButtons;
  249.     
  250.     
  251.     myDlog = (*this).myDlog;
  252.     myButtons = (*this).myButtons;
  253.  
  254.     for(i = 1; i < LAST_BUTTON; i++) {
  255.         if (i == itemHit) {
  256.             myButtons.button[i] = true;
  257.         }
  258.         else {
  259.             myButtons.button[i] = false;
  260.         }
  261.     }
  262.  
  263.     (*this).myButtons = myButtons;
  264.     RedrawButtons();
  265. }
  266. /*....................................................................*/
  267. void VCR::RedrawButtons()
  268. {
  269.     DialogPtr myDlog;
  270.     int itemType;
  271.     Handle itemHandle;
  272.     Rect itemRect;
  273.     CIconHandle    icon;
  274.     int i;
  275.     GrafPtr oldPort;
  276.     Buttons myButtons;
  277.     RGBColor fc,bc;
  278.     RGBColor temp;
  279.     
  280.     GetForeColor(&fc);
  281.     GetBackColor(&bc);
  282.     
  283.     temp.red = temp.green = temp.blue = 0xffff;
  284.     RGBBackColor(&temp);
  285.     temp.red = temp.green = temp.blue = 0x0000;
  286.     RGBForeColor(&temp);
  287.     
  288.     GetPort(&oldPort);
  289.     myDlog = (*this).myDlog;
  290.     myButtons = (*this).myButtons;
  291.     
  292.     SetPort(myDlog);
  293.     
  294.     for(i = 1; i < LAST_BUTTON; i++) {
  295.         if (myButtons.button[i] == true) {
  296.             GetDItem(myDlog,i,&itemType,&itemHandle,&itemRect);
  297.             icon = GetCIcon(myButtons.buttonRNum[i]);
  298.             if (icon == NULL) {
  299.                 SysBeep(7);
  300.                 (*myAlert).AlertStop("\pFatal Error",
  301.                             "\pUnable to get cicn resource",
  302.                             "\pVCR::RedrawButtons",NULL);
  303.             }
  304.             
  305.             HLock( icon );
  306.             HLock( (**icon).iconData );
  307.         
  308.             (**icon).iconPMap.baseAddr = *(**icon).iconData;
  309.             (**icon).iconMask.baseAddr = (Ptr)&(**icon).iconMaskData;
  310.             
  311.             CopyBits( &(**icon).iconPMap, &myDlog->portBits,
  312.                         &(**icon).iconPMap.bounds, &itemRect, notSrcCopy, 0 );
  313.         
  314.             HUnlock( (**icon).iconData );
  315.             HUnlock( icon );
  316.             DisposCIcon(icon);
  317.         }
  318.         else {
  319.             GetDItem(myDlog,i,&itemType,&itemHandle,&itemRect);
  320.             icon = GetCIcon(myButtons.buttonRNum[i]);
  321.             if (icon == NULL) {
  322.                 SysBeep(7);
  323.                 (*myAlert).AlertStop("\pFatal Error",
  324.                             "\pUnable to get cicn resource",
  325.                             "\pVCR::RedrawButtons",NULL);
  326.             }
  327.             HLock(icon);
  328.             PlotCIcon(&itemRect, icon);
  329.             HUnlock(icon);
  330.             DisposCIcon(icon);
  331.         }
  332.     }
  333.     
  334.     //(*this).myButtons = myButtons;
  335.     
  336.     /* draw volume controls */
  337.     GetDItem(myDlog,VOLUME_UP,&itemType,&itemHandle,&itemRect);
  338.     icon = GetCIcon(VOLUME_UP_CICN);
  339.     if (icon == NULL) {
  340.         SysBeep(7);
  341.         (*myAlert).AlertStop("\pFatal Error",
  342.                     "\pUnable to get cicn resource",
  343.                     "\pVCR::RedrawButtons",NULL);
  344.     }
  345.     HLock(icon);
  346.     PlotCIcon(&itemRect, icon);
  347.     HUnlock(icon);
  348.     DisposCIcon(icon);
  349.     
  350.     GetDItem(myDlog,VOLUME_DOWN,&itemType,&itemHandle,&itemRect);
  351.     icon = GetCIcon(VOLUME_DOWN_CICN);
  352.     if (icon == NULL) {
  353.         SysBeep(7);
  354.         (*myAlert).AlertStop("\pFatal Error",
  355.                     "\pUnable to get cicn resource",
  356.                     "\pVCR::RedrawButtons",NULL);
  357.     }
  358.     HLock(icon);
  359.     PlotCIcon(&itemRect, icon);
  360.     HUnlock(icon);
  361.     DisposCIcon(icon);
  362.     
  363.     RGBForeColor(&fc);
  364.     RGBBackColor(&bc);
  365.     
  366.     SetPort(oldPort);
  367. }
  368. /*....................................................................*/
  369. void VCR::RedrawStatus()
  370. {
  371.     DialogPtr myDlog;
  372.     int itemType;
  373.     Handle itemHandle;
  374.     Rect itemRect;
  375.     int i;
  376.     GrafPtr oldPort;
  377.     RGBColor fc,bc;
  378.     Buttons myButtons;
  379.  
  380.     
  381.     GetForeColor(&fc);
  382.     GetBackColor(&bc);
  383.     
  384.     
  385.     GetPort(&oldPort);
  386.     myDlog = (*this).myDlog;
  387.     myButtons = (*this).myButtons;
  388.     
  389.     GetDItem(myDlog,STATUS_BOX,&itemType,&itemHandle,&itemRect);
  390.     SetColor(sl_black);
  391.     PaintRect(&itemRect);
  392.     
  393.     SetColor(sl_darkGray);
  394.     
  395.     // draw border    
  396.     MoveTo(itemRect.left,itemRect.bottom + 1);
  397.     LineTo(itemRect.right + 1,itemRect.bottom + 1);
  398.     
  399.     MoveTo(itemRect.right + 1, itemRect.top);
  400.     LineTo(itemRect.right + 1, itemRect.bottom + 1);
  401.     
  402.     UpdateProgress();
  403.     SetPort(oldPort);
  404.     
  405.     RGBForeColor(&fc);
  406.     RGBBackColor(&bc);
  407.     
  408. }
  409. /*....................................................................*/
  410. void VCR::RedrawTime()
  411. {
  412.     DialogPtr myDlog;
  413.     int itemType;
  414.     Handle itemHandle;
  415.     Rect itemRect;
  416.     int i;
  417.     GrafPtr oldPort;
  418.     RGBColor fc,bc;
  419.     DateTimeRec myTime;
  420.     char time[80];
  421.     char day[6];
  422.     
  423.     
  424.     GetForeColor(&fc);
  425.     GetBackColor(&bc);
  426.     
  427.     GetPort(&oldPort);
  428.     myDlog = (*this).myDlog;
  429.     myButtons = (*this).myButtons;
  430.     
  431.     SetPort(myDlog);
  432.     
  433.     GetDItem(myDlog,CLOCK_BOX,&itemType,&itemHandle,&itemRect);
  434.     SetColor(sl_black);
  435.     PaintRect(&itemRect);
  436.     
  437.     SetColor(sl_darkGray);
  438.     // draw border    
  439.     MoveTo(itemRect.left,itemRect.bottom + 1);
  440.     LineTo(itemRect.right + 1,itemRect.bottom + 1);
  441.     
  442.     MoveTo(itemRect.right + 1, itemRect.top);
  443.     LineTo(itemRect.right + 1, itemRect.bottom + 1);
  444.     
  445.     GetTime(&myTime);
  446.     
  447.     switch(myTime.dayOfWeek) {
  448.         case 1:
  449.             sprintf(day,"SUN");
  450.             break;
  451.         case 2:
  452.             sprintf(day,"MON");
  453.             break;
  454.         case 3:
  455.             sprintf(day,"TUE");
  456.             break;
  457.         case 4:
  458.             sprintf(day,"WED");
  459.             break;
  460.         case 5:
  461.             sprintf(day,"THU");
  462.         break;
  463.         case 6:
  464.             sprintf(day,"FRI");
  465.             break;
  466.         case 7:
  467.             sprintf(day,"SAT");
  468.             break;
  469.         default: break;
  470.     }
  471.     
  472.     if (!clockSet) {
  473.         if (blink) {
  474.             SetColor(sl_white);
  475.             sprintf(time,"12:00");
  476.             MoveTo(itemRect.left+12,itemRect.bottom-12);
  477.             DrawString(CtoPstr(time));
  478.             
  479.             //sprintf(day,"???");
  480.             //MoveTo(itemRect.right - 30, itemRect.bottom-12);
  481.             //DrawString(CtoPstr(day));
  482.         }
  483.         
  484.     }
  485.     else {    
  486.         
  487.         if (blink) {
  488.             SetColor(sl_white);
  489.             //sprintf(time,"%02d:%02d %02d",myTime.hour,myTime.minute,myTime.second);
  490.             sprintf(time,"%02d:%02d",myTime.hour,myTime.minute);
  491.             MoveTo(itemRect.left+12,itemRect.bottom-12);
  492.             DrawString(CtoPstr(time));
  493.             
  494.             MoveTo(itemRect.right - 30, itemRect.bottom-12);
  495.             DrawString(CtoPstr(day));
  496.         }
  497.         else {
  498.             SetColor(sl_white);
  499.             //sprintf(time,"%02d %02d %02d",myTime.hour,myTime.minute,myTime.second);
  500.             sprintf(time,"%02d %02d",myTime.hour,myTime.minute);
  501.             MoveTo(itemRect.left+12,itemRect.bottom-12);
  502.             DrawString(CtoPstr(time));
  503.             
  504.             MoveTo(itemRect.right - 30, itemRect.bottom-12);
  505.             DrawString(CtoPstr(day));
  506.         }
  507.     }
  508.     
  509.     
  510.     SetPort(oldPort);
  511.     
  512.     RGBForeColor(&fc);
  513.     RGBBackColor(&bc);
  514. }
  515. /*....................................................................*/
  516. void VCR::UpdateProgress()
  517. {
  518.     DialogPtr myDlog;
  519.     GrafPtr oldPort;
  520.     RGBColor fc,bc;
  521.     Buttons myButtons;
  522.     
  523.     GetForeColor(&fc);
  524.     GetBackColor(&bc);
  525.     
  526.     GetPort(&oldPort);
  527.     myDlog = (*this).myDlog;
  528.     myButtons = (*this).myButtons;
  529.     
  530.     SetPort(myDlog);
  531.     
  532.     newTick = TickCount();
  533.     if (myButtons.button[PLAY_BUTTON] == true) {
  534.         if ( (newTick - oldTick) > 25) {
  535.             int i,j;
  536.             
  537.             i = currentrect;
  538.             currentrect++;
  539.             
  540.             if (currentrect > 3) currentrect = 0;            
  541.             j = currentrect;
  542.             Draw2Rects2Colors(myRects[i],sl_darkGray,myRects[j],sl_white);
  543.             oldTick = newTick;
  544.         }
  545.     }
  546.     else if (myButtons.button[FF_BUTTON] == true) {
  547.         if ( (newTick - oldTick) > 10) {
  548.             int i,j;
  549.             
  550.             i = currentrect;
  551.             currentrect++;
  552.             
  553.             if (currentrect > 3) currentrect = 0;            
  554.             j = currentrect;
  555.             Draw2Rects2Colors(myRects[i],sl_darkGray,myRects[j],sl_white);
  556.             oldTick = newTick;
  557.         }
  558.     }
  559.     else if (myButtons.button[RW_BUTTON] == true) {
  560.         if ( (newTick - oldTick) > 10) {
  561.             int i,j;
  562.             
  563.             i = currentrect;
  564.             
  565.             currentrect--;
  566.                 
  567.             if (currentrect < 0) currentrect = 3;
  568.             j = currentrect;
  569.             
  570.             Draw2Rects2Colors(myRects[i],sl_darkGray,myRects[j],sl_white);
  571.         
  572.             oldTick = newTick;
  573.         }
  574.     }
  575.     else {
  576.         
  577.         if ( (newTick - oldTick) > 120) {    
  578.             DrawAllProgress(sl_darkGray);
  579.             oldTick = newTick;
  580.             currentrect = 0;
  581.  
  582.         }
  583.  
  584.     }
  585.     
  586.     
  587.     
  588.     SetPort(oldPort);
  589.     
  590.     RGBForeColor(&fc);
  591.     RGBBackColor(&bc);
  592. }    
  593. /*....................................................................*/
  594. void VCR::DrawAllProgress(int color)
  595. {
  596.     int i;
  597.     GrafPtr oldPort;
  598.     RGBColor fc,bc;
  599.     
  600.     
  601.     GetForeColor(&fc);
  602.     GetBackColor(&bc);
  603.     
  604.     GetPort(&oldPort);
  605.     myDlog = (*this).myDlog;
  606.     SetPort(myDlog);
  607.     
  608.     SetColor(color);
  609.     for(i = 0; i < 4; i++) {
  610.         PaintRect(&myRects[i]);
  611.     }
  612.     
  613.     SetPort(oldPort);
  614.     
  615.     RGBForeColor(&fc);
  616.     RGBBackColor(&bc);
  617. }
  618. /*....................................................................*/
  619. void VCR::Draw2Rects2Colors(Rect r1, int color1, Rect r2, int color2)
  620. {
  621.     RGBColor fc,bc;
  622.     
  623.     GetForeColor(&fc);
  624.     GetBackColor(&bc);
  625.     
  626.     SetColor(color1);
  627.     PaintRect(&r1);
  628.     SetColor(color2);
  629.     PaintRect(&r2);
  630.     
  631.     RGBForeColor(&fc);
  632.     RGBBackColor(&bc);
  633. }
  634. /*....................................................................*/
  635. void VCR::ClearAllButtons()
  636. {
  637.     Buttons myButtons;
  638.     int i;
  639.     Boolean toDo = false;
  640.     
  641.     myButtons = (*this).myButtons;
  642.     
  643.         
  644.     for(i = 1; i < LAST_BUTTON; i++) {
  645.         if ( (toDo == false) && (myButtons.button[i] == true) ) {
  646.             toDo = true;
  647.         }
  648.         myButtons.button[i] = false;
  649.     }
  650.     
  651.     (*this).myButtons = myButtons;
  652.     
  653.     if (toDo) RedrawButtons();
  654. }
  655. /*....................................................................*/
  656. void VCR::FlashButton(int id)
  657. {
  658.     int itemType;
  659.     Handle itemHandle;
  660.     Rect itemRect;
  661.     CIconHandle    icon;
  662.     int CICN_NUM;
  663.     GrafPtr oldPort;
  664.     DialogPtr myDlog = (*this).myDlog;
  665.     RGBColor temp;
  666.     
  667.     GetPort(&oldPort);
  668.     SetPort(myDlog);
  669.     
  670.     temp.red = temp.green = temp.blue = 0xffff;
  671.     RGBBackColor(&temp);
  672.     temp.red = temp.green = temp.blue = 0x0000;
  673.     RGBForeColor(&temp);
  674.     
  675.     switch (id) {
  676.         case VOLUME_UP:
  677.             CICN_NUM = VOLUME_UP_CICN;
  678.             break;
  679.         case VOLUME_DOWN:
  680.             CICN_NUM = VOLUME_DOWN_CICN;
  681.             break;
  682.         default: return; break;
  683.     }
  684.     GetDItem(myDlog,id,&itemType,&itemHandle,&itemRect);
  685.     icon = GetCIcon(CICN_NUM);
  686.     if (icon == NULL) {
  687.         SysBeep(7);
  688.         (*myAlert).AlertStop("\pFatal Error",
  689.                     "\pUnable to get cicn resource",
  690.                     "\pVCR::FlashButton",NULL);
  691.     }
  692.     
  693.     HLock( icon );
  694.     HLock( (**icon).iconData );
  695.     (**icon).iconPMap.baseAddr = *(**icon).iconData;
  696.     (**icon).iconMask.baseAddr = (Ptr)&(**icon).iconMaskData;
  697.     
  698.     CopyBits( &(**icon).iconPMap, &myDlog->portBits,
  699.                 &(**icon).iconPMap.bounds, &itemRect, notSrcCopy, 0 );
  700.  
  701.     SystemTask();
  702.     (*myQT).MyMoviesTask();
  703.     
  704.     PlotCIcon(&itemRect, icon);
  705.     HUnlock( (**icon).iconData );
  706.     HUnlock(icon);
  707.     DisposCIcon(icon);
  708.  
  709.     SetPort(oldPort);
  710.  
  711. }